package com.matrix.core.tools;

import java.security.MessageDigest;

/**
 * MD5工具类
 * 
 * @author jiangyouyao
 * @email 512061637@qq.com
 * @date 2019年2月25日
 */
public class MD5Util {

	/**
	 * 把字节数组转成16进位制数
	 * 
	 * @author jiangyouyao
	 * @email 512061637@qq.com
	 * @date 2019年2月25日
	 * @param bytes
	 * @return
	 */
	public static String bytesToHex(byte[] bytes) {
		StringBuffer md5str = new StringBuffer();
		// 把数组每一字节换成16进制连成md5字符串
		int digital;
		for (int i = 0; i < bytes.length; i++) {
			digital = bytes[i];
			if (digital < 0) {
				digital += 256;
			}
			if (digital < 16) {
				md5str.append("0");
			}
			md5str.append(Integer.toHexString(digital));
		}
		return md5str.toString();
	}

	/**
	 * 把字节数组转换成md5
	 * 
	 * @author jiangyouyao
	 * @email 512061637@qq.com
	 * @date 2019年2月25日
	 * @param input
	 * @return
	 */
	public static String bytesToMD5(byte[] input) {
		String md5str = null;
		try {
			// 创建一个提供信息摘要算法的对象，初始化为md5算法对象
			MessageDigest md = MessageDigest.getInstance("MD5");
			// 计算后获得字节数组
			byte[] buff = md.digest(input);
			// 把数组每一字节换成16进制连成md5字符串
			md5str = bytesToHex(buff);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return md5str;
	}

	/**
	 * 把字符转换成md5
	* @author jiangyouyao
	* @email 512061637@qq.com
	* @date 2019年2月25日
	* @param str
	* @return
	 */
	public static String strToMD5(String str) {
		byte[] input = str.getBytes();

		return bytesToMD5(input);
	}

}
